package com.cw.jeeyt.common.utils;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

/**
 * JSON转换类
 *
 * @author fengmq
 */
public class JSONTool {
    /**
     * 将List对象转换成JSON字符串
     *
     * @param list 待转换成字符串的List对象
     * @return JSON字符串
     */
    public static String toJson(List<?> list) {
        String jsonString = JSONArray.toJSONString(list);
        return jsonString;
    }

    /**
     * 讲对象转换成JSON字符串
     *
     * @param object 待转换成字符串的对象
     * @return JSON字符串
     */
    public static String toJson(Object object) {
        String jsonString = JSONObject.toJSONString(object);
        return jsonString;
    }

    /**
     * 将字符串转换成JSON对象
     *
     * @param json 待转换的字符串
     * @return JSONObject
     */
    public static JSONObject toJSONObject(String json) {
        JSONObject jsonObject = JSONObject.parseObject(json);
        return jsonObject;
    }

    /**
     * 将json字符串转换成bean对象
     *
     * @param <T>
     * @param json
     * @param beanClass
     * @return
     */
    public static <T> T toBean(String json, Class<T> beanClass) {
        JSONObject jsonObject = toJSONObject(json);
        T bean = (T) JSONObject.toJavaObject(jsonObject, beanClass);
        return bean;
    }

    /**
     * 将字符串转换成JSON数组
     *
     * @param json 待转换的字符串
     * @return JSONArray
     */
    public static JSONArray toJSONArray(String json) {
        JSONArray jsonArray = JSONArray.parseArray(json);
        return jsonArray;
    }

    /**
     * 将JSON字符串转换成bean对象数组
     *
     * @param json json字符串
     * @param classArr bean数组
     * @return
     */
    public static Object[] toArray(String json, Class<?>[] classArr) {
        JSONArray jsonArray = toJSONArray(json);
        Object[] rtn = new Object[jsonArray.size()];
        for (int i = 0; i < jsonArray.size(); i++) {
            Object el = jsonArray.get(i);
            Object object = el;
            if (el instanceof JSONObject) {
                object = JSONObject.toJavaObject((JSONObject) el, classArr[i]);
            }
            rtn[i] = object;
        }
        return rtn;
    }

    public static String updateJson(String json, String key, String value) {
        Map<String, Object> jsonMap = new HashMap<>();
        String jsonKey;
        Object jsonValue;
        if (StringTools.isEmpty(json)) {
            jsonMap.put(key, value);
        } else {
            JSONObject jObject = JSONObject.parseObject(json);
            boolean flag = false;
            Set<String> keys = jObject.keySet();
            Iterator<String> iterator = keys.iterator();
            while (iterator.hasNext()) {
                jsonKey = (String) iterator.next();
                jsonValue = jObject.get(jsonKey);
                if (key.equals(jsonKey)) {
                    jsonValue = value;
                    flag = true;
                }
                jsonMap.put(jsonKey, jsonValue);
            }
            if (!flag) {
                jsonMap.put(key, value);
            }
        }
        return JSONObject.toJSONString(jsonMap);
    }

}
